<?php

class Pacientes extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        $this->load->model('pa_model');
        $this->load->model('cir_model');
        $this->load->model('os_model');
        $this->load->model('lt_model');
        $this->load->model('act_model');
        $this->load->model('loc_model');
        $this->load->library('gf');
        $this->load->config('siscat_config');
    }

    function index()
    {
        $this->lists();
    }

    function form($id_paciente = 0)
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        //Saber que template mostrar   
        $tipo_template = $this->input->get('tipo_template');

        $query_rows = $this->pa_model->find($id_paciente);
        $row = $query_rows->row();

        if ($query_rows->num_rows() == 0)
        {
            $data['title'] = $this->config->item('pa_title_new');
            $data['accion'] = "crear";
            //variables tabla pacientes
            $data['id_paciente'] = 0;
            $data['p_nombre'] = "";
            $data['p_apellido'] = "";
            $data['p_historia_clinica'] = "";
            $data['p_fecha_nacimiento'] = "";
            $data['p_dni'] = "";
            $data['p_numero_afiliado'] = "";
            $data['p_localidad'] = "";
            $data['p_telefono'] = "";
            $data['id_obra_social'] = 0;

            //Variables fecha aparte
            $data['dia'] = "";
            $data['mes'] = "";
            $data['anio'] = "";
        }
        else
        {
            $data['title'] = $this->config->item('pa_title_edit');
            $data['accion'] = "editar";
            //variables tabla pacientes
            $data['id_paciente'] = $row->id_paciente;
            $data['p_nombre'] = $row->p_nombre;
            $data['p_apellido'] = $row->p_apellido;
            $data['p_historia_clinica'] = $row->p_historia_clinica;
            $data['p_fecha_nacimiento'] = $row->p_fecha_nacimiento;
            $data['p_dni'] = $row->p_dni;
            $data['p_numero_afiliado'] = $row->p_numero_afiliado;
            $data['p_localidad'] = $row->p_localidad;
            $data['p_telefono'] = $row->p_telefono;
            $data['id_obra_social'] = $row->id_obra_social;

            //Conversion de p_fecha_nacimiento a dia, mes, anio
            $fecha_explode = explode("-", $row->p_fecha_nacimiento);
            $data['dia'] = $fecha_explode[2];
            $data['mes'] = $fecha_explode[1];
            $data['anio'] = $fecha_explode[0];
        }
        //Array para armar los select de las fechas
        $data['dias_array'] = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31');
        $data['meses_array'] = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
        $data['anios_array'] = $this->anios_array();

        //Cuando abro el form con el fancy no quiero que se vea el boton volver por eso es esta variable
        $data['tipo_template'] = $tipo_template;


        //Array obras sociales que se muestran en el select
        $data['os_array'] = $this->os_model->select();
        $data['localidades_array']=$this->loc_model->select();
        $data['view'] = 'pacientes/pacientes_form';
        $data['css'] = array('js/jquery-ui/development-bundle/themes/base/jquery.ui.all', 'css/parsley');
        $data['js'] = array(
            'js/blockui-master/jquery.blockUI',
            'js/bootstrap-master/docs/assets/js/bootstrap-transition',
            'js/bootstrap-master/docs/assets/js/bootstrap-alert',
            'js/bootstrap-master/docs/assets/js/bootstrap-modal',
            'js/jquery-ui/development-bundle/ui/jquery.ui.core',
            'js/jquery-ui/development-bundle/ui/jquery.ui.widget',
            'js/jquery-ui/development-bundle/ui/jquery.ui.position',
            'js/jquery-ui/development-bundle/ui/jquery.ui.menu',
            'js/jquery-ui/development-bundle/ui/jquery.ui.autocomplete',
            'js/parsley/parsley',
            'js/parsley/messages',
            'js/pacientes_form'
        );


        if ($tipo_template == '')
            $this->load->view('templates/temp_menu', $data);
        else
            $this->load->view('templates/temp_simple', $data);
    }

    function view($id_paciente = 0)
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $data['title'] = "Detalles cirugía/s por paciente";

        $query_row = $this->pa_model->find_paciente_ficha($id_paciente);

        if ($query_row->num_rows() == 0)
        {
            echo "No existe el paciente";
            exit();
        }
        else
        {
            $data['pa_row'] = $query_row->row();
            $data['cirugias_rows'] = $this->cir_model->cirugias_por_paciente($id_paciente);
        }
        $data['view'] = 'pacientes/pacientes_cirugias';
        $data['css'] = array('css/pacientes_cirugias');

        $this->load->view('templates/temp_menu', $data);
    }

    //Se usa para ajax guarda los registros de obras sociales
    function save()
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $id_paciente = $this->input->post('id_paciente');
        $accion = $this->input->post('accion');

        //Armar el array fecha para guardar
        $dia = $this->input->post('dia');
        $mes = $this->input->post('mes');
        $anio = $this->input->post('anio');
        //Ordeno la fecha para poder guardarla en la bd
        
        $p_nombre=strtoupper($this->input->post('p_nombre'));
        $p_apellido=strtoupper($this->input->post('p_apellido'));
        $p_historia_clinica=$this->input->post('p_historia_clinica');
        $p_fecha_nacimiento = $anio . "-" . $mes . "-" . $dia;
        $p_dni=$this->input->post('p_dni');
        $p_numero_afiliado=$this->input->post('p_numero_afiliado');
        $p_localidad=strtoupper($this->input->post('p_localidad'));
        $p_telefono=strtoupper($this->input->post('p_telefono'));
        $id_obra_social=$this->input->post('id_obra_social');


        //Controlar si la localidad ya existe sino crear una nueva
        //$this->pa_model->localidades_control($p_localidad);

        //Creo el array     
        $pa_array = array
            (
            'p_nombre' => $p_nombre,
            'p_apellido' => $p_apellido,
            'p_historia_clinica' => $p_historia_clinica,
            'p_fecha_nacimiento' => $p_fecha_nacimiento,
            'p_dni' => $p_dni,
            'p_numero_afiliado' => $p_numero_afiliado,
            'p_localidad' => $p_localidad,
            'p_telefono' => $p_telefono,
            'id_obra_social' => $id_obra_social
        );

        //Se busca para la devolucion en javascript
        $row_query = $this->os_model->find($id_obra_social);
        $row = $row_query->row();
        $os_nombre = "";
        if ($row_query->num_rows() > 0)
            $os_nombre = $row->os_nombre;
        else
            $os_nombre = "";

        //Si el nombre de la obra social no esta vacio
        $array = array();
        
        //Bandera si se guardo correctamente o no
        $exito="true";
        if ($accion == 'crear')
        {
            //Funcion que escribe lo correspondiente en la tabla actividades
            $this->registro_pacientes('crear', $id_paciente, $pa_array);

            //Verificar que p_historia_clinica sea unico
            $p_historia_clinica_b=0;
            $query_row=$this->pa_model->find_historia_clinica($p_historia_clinica,'0');
            if($query_row->num_rows()>0)
                $p_historia_clinica_b=1;
            else
                $p_historia_clinica_b=0;
            //Verificar que dni sea unico
            $p_dni_b=0;
            $query_row=$this->pa_model->find_dni($p_dni,'0');
            if($query_row->num_rows()>0)
                $p_dni_b=1;
            else
                $p_dni_b=0;
            
            //Si p_historia_clinica y p_dni no se repite se guarda
            $id_ultimo="";
            if($p_historia_clinica_b==0 && $p_dni_b==0)
            {
                //Guardar el paciente
                $id_ultimo = $this->pa_model->insert($pa_array);
                $exito="true";
            }
            else
            {
                $exito="false";
            }
            
            
            //Array que devuelve el json todos estos datos la mayoria sirve para cuando creamos un paciente nuevo
            //desde cirugias entonces tengo que devolver obra social numero de afiliado todo al cerrar el fancybox
            $array = array(
                'accion' => 'crear',
                'id' => $id_ultimo,
                'p_apellido' => $p_apellido,
                'p_nombre' => $p_nombre,
                'p_numero_afiliado' => $p_numero_afiliado,
                'os_nombre' => $os_nombre,
                'p_historia_clinica' => $p_historia_clinica,
                'exito' => $exito
            );
        }
        if ($accion == 'editar')
        {
            //Funcion que escribe lo correspondiente en la tabla actividades
            $this->registro_pacientes('editar', $id_paciente, $pa_array);
            
            //Verificar que p_historia_clinica sea unico
            $p_historia_clinica_b=0;
            $query_row=$this->pa_model->find_historia_clinica($p_historia_clinica,$id_paciente);
            if($query_row->num_rows()>0)
                $p_historia_clinica_b=1;
            else
                $p_historia_clinica_b=0;
            //Verificar que dni sea unico
            $p_dni_b=0;
            $query_row=$this->pa_model->find_dni($p_dni,$id_paciente);
            if($query_row->num_rows()>0)
                $p_dni_b=1;
            else
                $p_dni_b=0;
            
            //Si p_historia_clinica y p_dni no se repite se guarda
            if($p_historia_clinica_b==0 && $p_dni_b==0)
            {
                //actualizar el paciente
                $this->pa_model->update($id_paciente, $pa_array);
                $exito="true";
            }
            else
            {
                $exito="false";
            }

            
            //Array que devuelve el json
            $array = array(
                'accion' => 'editar',
                'id' => $id_paciente,
                'p_apellido' => $p_apellido,
                'p_nombre' => $p_nombre,
                'p_numero_afiliado' => $p_numero_afiliado,
                'os_nombre' => $os_nombre,
                'p_historia_clinica' => $p_historia_clinica
            );
        }

        echo json_encode($array);
    }

    //Se usa para ajax valida si existe la obra social
    function validar()
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $tipo = $this->input->post('tipo');
        $id_paciente = $this->input->post('id_paciente');

        if ($tipo == 'dni')
        {
            $p_dni = $this->input->post('p_dni');
            $row = $this->pa_model->find_dni($p_dni, $id_paciente);

            if ($row->num_rows() == 0)
                echo "false";
            else
                echo "true";
        }
        elseif ($tipo == 'h_clinica')
        {
            $p_historia_clinica = $this->input->post('p_historia_clinica');
            $row = $this->pa_model->find_historia_clinica($p_historia_clinica, $id_paciente);

            if ($row->num_rows() == 0)
                echo "false";
            else
                echo "true";
        }
        elseif ($tipo == 'afiliado')
        {
            $p_numero_afiliado = $this->input->post('p_numero_afiliado');
            $row = $this->pa_model->find_numero_afiliado($p_numero_afiliado, $id_paciente);

            if ($row->num_rows() == 0)
                echo "false";
            else
                echo "true";
        }
    }

    //Se usa para eliminar en ajax
    function delete()
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $id_paciente = $this->input->post('id_paciente');
        $this->pa_model->delete($id_paciente);
    }

    function lists()
    {
        $this->load->library('pagination');

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $p_nombre = $this->input->get('p_nombre');
        $p_apellido = $this->input->get('p_apellido');
        $p_dni = $this->input->get('p_dni');
        $p_historia_clinica = $this->input->get('p_historia_clinica');
        $p_localidad = $this->input->get('p_localidad');
        $os_nombre = $this->input->get('os_nombre');
        $c_fecha_cirugia_desde = $this->input->get('c_fecha_cirugia_desde');
        $c_fecha_cirugia_desde = $this->gf->fecha($c_fecha_cirugia_desde);
        $c_fecha_cirugia_hasta = $this->input->get('c_fecha_cirugia_hasta');
        $c_fecha_cirugia_hasta = $this->gf->fecha($c_fecha_cirugia_hasta);


        //Array para convertirlo en url y luego pasarselo a la paginacion (para que no se repita de nuevo per_page)
        $get_array = $this->input->get();
        $get_query = "";
        if (is_array($get_array))
            $get_query = http_build_query($get_array);

        //Paginacion
        $per_page = $this->input->get('per_page');
        if ($per_page == "")
            $per_page = 0;

        $n_pag = 30;
        $array_query_result = $this->pa_model->select_buscar($p_nombre, $p_apellido, $p_dni, $p_historia_clinica, $os_nombre, $p_localidad, $c_fecha_cirugia_desde, $c_fecha_cirugia_hasta, $per_page, $n_pag);
        $data['pacientes_array'] = $array_query_result['rows'];
        //Es el resultado de resultados de la consulta sin limit y todos los parametros correspondientes
        $result_number = $array_query_result['total_count'];

        $this->config->load("pagination");
        $config["base_url"] = base_url() . "pacientes/lists/?" . $get_query;
        $config["total_rows"] = $result_number;
        $config["per_page"] = $n_pag;
        $this->pagination->initialize($config);
        $data["links"] = $this->pagination->create_links();


        $data['title'] = $this->config->item('pa_title_list');
        $data['view'] = 'pacientes/pacientes_list';
        $data['css'] = array('js/jquery-ui/development-bundle/themes/base/jquery.ui.all');
        $data['js'] = array(
            'js/blockui-master/jquery.blockUI',
            'js/bootstrap-master/docs/assets/js/bootstrap-transition',
            'js/bootstrap-master/docs/assets/js/bootstrap-alert',
            'js/bootstrap-master/docs/assets/js/bootstrap-modal',
            'js/bootstrap-master/docs/assets/js/bootstrap-tab',
            'js/jquery-ui/development-bundle/ui/jquery.ui.core',
            'js/jquery-ui/development-bundle/ui/jquery.ui.widget',
            'js/jquery-ui/development-bundle/ui/jquery.ui.position',
            'js/jquery-ui/development-bundle/ui/jquery.ui.menu',
            'js/jquery-ui/development-bundle/ui/jquery.ui.autocomplete',
            'js/jquery-ui/development-bundle/ui/jquery.ui.datepicker',
            'js/pacientes_list'
        );

        $this->load->view('templates/temp_menu', $data);
    }

    //Funcion que siver para autocompletar las localidades en el formulario de pacientes
    function localidades_list()
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $query = "select localidad from localidades";
        $rows = $this->db->query($query);
        $rows = $rows->result_array();
        $array_comas = "";
        foreach ($rows as $var)
        {
            $array_comas = $var['localidad'] . "-" . $array_comas;
        }
        $array_comas = substr($array_comas, 0, strlen($array_comas) - 1);

        echo $array_comas;
    }

    function obras_sociales_list()
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        $query = "select os_nombre from obras_sociales";
        $rows = $this->db->query($query);
        $rows = $rows->result_array();
        $array_comas = "";
        foreach ($rows as $var)
        {
            $array_comas = $var['os_nombre'] . "-" . $array_comas;
        }
        $array_comas = substr($array_comas, 0, strlen($array_comas) - 1);

        echo $array_comas;
    }

    private function registro_pacientes($accion, $id, $ro)
    {

        $a = $this->session->userdata('logged_in');
        $acceso = $this->gf->rol_check('user', $a, base_url());

        if ($accion == 'editar')
        {
            $query = sprintf("select * from pacientes where id_paciente=%s", $id);
            $row = $this->db->query($query);
            $row = $row->row_array();

            $tr_1 = $this->gf->color_tr($row['p_nombre'], $ro['p_nombre']);
            $tr_2 = $this->gf->color_tr($row['p_apellido'], $ro['p_apellido']);
            $tr_3 = $this->gf->color_tr($row['p_fecha_nacimiento'], $ro['p_fecha_nacimiento']);
            $tr_4 = $this->gf->color_tr($row['p_dni'], $ro['p_dni']);
            $tr_5 = $this->gf->color_tr($row['p_numero_afiliado'], $ro['p_numero_afiliado']);
            $tr_6 = $this->gf->color_tr($row['p_localidad'], $ro['p_localidad']);
            $tr_7 = $this->gf->color_tr($row['p_telefono'], $ro['p_telefono']);
            $tr_8 = $this->gf->color_tr($row['p_historia_clinica'], $ro['p_historia_clinica']);
            $tr_9 = $this->gf->color_tr($row['id_obra_social'], $ro['id_obra_social']);

            if ($tr_1 != "" || $tr_2 != "" || $tr_3 = !"" || $tr_4 = !"" || $tr_5 = !"" || $tr_6 = !"" || $tr_7 = !"" || $tr_8 = !"" || $tr_9 = !"")
            {
                $obra_social_vieja = $this->os_model->find_return_nombre($row['id_obra_social']);
                $obra_social_nueva = $this->os_model->find_return_nombre($ro['id_obra_social']);

                $accion = "Se actualizo el paciente " . $row['p_apellido'] . ", " . $row['p_nombre'];
                $detalle = "<table class='table'>
                    <tr><th>Campo</th><th>Valor viejo</th><th>Valor nuevo</th></tr>
                    <tr class='" . $tr_1 . "' ><td><b>Nombre</b></td><td>" . $row['p_nombre'] . "</td><td>" . $ro['p_nombre'] . "</td></tr>
                    <tr class='" . $tr_2 . "' ><td><b>Apellido</b></td><td>" . $row['p_apellido'] . "</td><td>" . $ro['p_apellido'] . "</td></tr>
                    <tr class='" . $tr_3 . "' ><td><b>Fecha nacimiento</b></td><td>" . $row['p_fecha_nacimiento'] . "</td><td>" . $ro['p_fecha_nacimiento'] . "</td></tr>
                    <tr class='" . $tr_4 . "' ><td><b>DNI</b></td><td>" . $row['p_dni'] . "</td><td>" . $ro['p_dni'] . "</td></tr>
                    <tr class='" . $tr_5 . "' ><td><b>Numero afiliado</b></td><td>" . $row['p_numero_afiliado'] . "</td><td>" . $ro['p_numero_afiliado'] . "</td></tr>
                    <tr class='" . $tr_6 . "' ><td><b>Localidad</b></td><td>" . $row['p_localidad'] . "</td><td>" . $ro['p_localidad'] . "</td></tr>
                    <tr class='" . $tr_7 . "' ><td><b>Telefóno</b></td><td>" . $row['p_telefono'] . "</td><td>" . $ro['p_telefono'] . "</td></tr>
                    <tr class='" . $tr_8 . "' ><td><b>Historia clínica</b></td><td>" . $row['p_historia_clinica'] . "</td><td>" . $ro['p_historia_clinica'] . "</td></tr>
                    <tr class='" . $tr_9 . "' ><td><b>Obra social</b></td><td>" . $obra_social_vieja . "</td><td>" . $obra_social_nueva . "</td></tr>
                </table>";

                $act_array = array(
                    'a_accion' => $accion,
                    'a_detalle' => $detalle,
                    'id_usuario' => $a['id_usuario']
                );
                $this->act_model->insert($act_array);
            }
        }
        elseif ($accion == 'crear')
        {
            $obra_social_nueva = $this->os_model->find_return_nombre($ro['id_obra_social']);

            $accion = "Se creo el paciente " . $ro['p_apellido'] . ", " . $ro['p_nombre'];
            $detalle = "<table class='table'>
                    <tr><th>Campo</th><th>Valor nuevo</th></tr>
                    <tr><td><b>Nombre</b></td><td>" . $ro['p_nombre'] . "</td></tr>
                    <tr><td><b>Apellido</b></td><td>" . $ro['p_apellido'] . "</td></tr>
                    <tr><td><b>Fecha nacimiento</b></td><td>" . $ro['p_fecha_nacimiento'] . "</td></tr>
                    <tr><td><b>DNI</b></td><td>" . $ro['p_dni'] . "</td></tr>
                    <tr><td><b>Numero afiliado</b></td><td>" . $ro['p_numero_afiliado'] . "</td></tr>
                    <tr><td><b>Localidad</b></td><td>" . $ro['p_localidad'] . "</td></tr>
                    <tr><td><b>Telefóno</b></td><td>" . $ro['p_telefono'] . "</td></tr>
                    <tr><td><b>Historia clínica</b></td><td>" . $ro['p_historia_clinica'] . "</td></tr>
                    <tr><td><b>Obra social</b></td><td>" . $obra_social_nueva . "</td></tr>
                </table>";

            $act_array = array(
                'a_accion' => $accion,
                'a_detalle' => $detalle,
                'id_usuario' => $a['id_usuario']
            );
            $this->act_model->insert($act_array);
        }
    }

    private function anios_array()
    {
        $final = array();
        $actual = date('Y');
        $hasta = $actual - 93;
        $i = 0;
        for ($i = $actual; $i >= $hasta; $i--)
        {
            array_unshift($final, $i);
        }
        return $final;
    }

}

?>